/***********************************************************************
 * 描述:		该类提供API基本信息设置与获取
 * File:    apiinfo.h
 * Author:  liquan@mozihealthcare.cn
 * Date:    2025-10-9
 * Update:
 **********************************************************************/

#ifndef APIINFO_H
#define APIINFO_H

#include "export.h"
#include <iostream>

/**
 * API基本信息设置与获取
 */
class CXI_API_EXPORT ApiInfo
{
	//私有化构造，不允许实例化
	ApiInfo();

public:
	static void setMaxConnects(int maxConnects);
	/**
	 * 获取连接超时时长
	 * @return 连接超时时长(毫秒)
	 */
	static long connectTimeout();
	/**
	 * 设置连接超时时长
	 * @param timeout 连接超时时长(毫秒)
	 */
	static void setConnectTimeout(long timeout);
	/**
	 * 获取总超时时长
	 * @return 总超时时长(毫秒)
	 */
	static long requestTimeout();
	/**
	 * 设置总超时时长
	 * @param timeout 总超时时长(毫秒)
	 */
	static void setRequestTimeout(long timeout);
	/**
	 * 获取客户端版本号
	 * @return 客户端版本号
	 */
	static std::string getVersionNo();
	/**
	 * 设置客户端版本号
	 * @param versionNo 客户端版本号
	 */
	static void setVersionNo(const std::string& versionNo);
	/**
	 * 获取接口根地址
	 * @return 接口根地址
	 */
	static std::string getRootUrl();
	/**
	 * 设置接口根地址
	 * @param rootUrl 接口根地址
	 */
	static void setRootUrl(const std::string& rootUrl);
	/**
	 * 获取当前登录用户ID
	 * @return 当前登录用户ID
	 */
	static std::string getLoginUserId();
	/**
	 * 获取当前登录用户姓名
	 * @return 当前登录用户姓名
	 */
	static std::string getLoginUserName();
	/**
	 * 获取当前登录用户姓名可供Web传输的字符串
	 * @return 当前登录用户姓名可供Web传输的字符串
	 */
	static std::string getLoginUserNameEncoded();
	/**
	 * 获取客户端请求Ip
	 * @return 客户端Ip
	 */
	static std::string getIp();
	/**
	 * 获取活动的模块Id
	 * @return 活动的模块Id
	 */
	static std::string getActiveFuncId();
	/**
	 * 设置活动的模块Id
	 * @param activeFuncId 活动的模块Id
	 */
	static void setActiveFuncId(const std::string& activeFuncId);
	/**
	 * 若通过后端进行登录操作，需要在前端设置的信息
	 * @param token 登录Token
	 * @param loginIp 登录Ip
	 * @param userId 当前登录用户ID
	 * @param userName 当前登录用户姓名
	 */
	static void setInfoAfterLogin(const std::string& token, const std::string& loginIp, const std::string& userId, const std::string& userName);

private:
	//设置当前登录Token
	static void setLoginToken(const std::string& loginToken);
	//获取当前登录Token
	static std::string getLoginToken();
	//设置当前登录用户ID
	static void setLoginUserId(const std::string& loginUserId);
	//设置当前登录用户姓名
	static void setLoginUserName(const std::string &loginUserName);
	//获取随机ID
	static std::string getGuid();
	//获取计算机名
	static std::string getHostName();
	//设置客户端请求Ip
	static void setIp(const std::string &ip);
};

#endif //APIINFO_H